package com.yiren.dbaa.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.yiren.backstage.currency.utils.StringUtil;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.SoftReference;

/**
 * Describe   屏幕 dp、sp 转换为 px 的工具类
 */
public class DensityUtil {

	/**
	 * 分割符
	 */
	public static String SPLIT = "#";

	/**
	 * 得到设备屏幕的宽度
	 */
	public static int getScreenWidth(Context context) {
		return context.getResources().getDisplayMetrics().widthPixels;
	}

	/**
	 * 得到设备屏幕的高度
	 */
	public static int getScreenHeight(Context context) {
		return context.getResources().getDisplayMetrics().heightPixels;
	}

	/**
	 * 得到设备的密度
	 */
	public static float getScreenDensity(Context context) {
		float density = context.getResources().getDisplayMetrics().density;
		return density;
	}

	/**
	 * 将px值转换为dp，保证尺寸大小不变
	 *
	 * @param pxValue
	 * @return
	 */
	public static int px2dip(Context context, float pxValue) {
		return (int) (pxValue / getScreenDensity(context) + 0.5f);
	}

	/**
	 * 将dp值转换为px值，保证尺寸大小不变
	 *
	 * @param dipValue
	 * @return
	 */
	public static int dip2px(Context context, float dipValue) {
		return (int) (dipValue * getScreenDensity(context) + 0.5f);
	}

	/**
	 * 将px值转换为sp值，保证文字大小不变
	 *
	 * @param pxValue
	 * @return
	 */
	public static int px2sp(Context context, float pxValue) {
		float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
		return (int) (pxValue / fontScale + 0.5f);
	}

	/**
	 * 将sp值转换为px值，保证文字大小不变
	 *
	 * @param spValue
	 * @return
	 */
	public static int sp2px(Context context, float spValue) {
		float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
		return (int) (spValue * fontScale + 0.5f);
	}

	/**
	 * add by cwy 2018-02-01 靠边停车设置
	 * byte转换成bitMap
	 * 这里进行压缩
	 * @param b
	 * @return
	 */
	public static Bitmap Bytes2Bimap(byte[] b, int jpeglen) {
		if (jpeglen != 0) {
			return  BitmapFactory.decodeByteArray(b, 0, jpeglen);
		} else {
			return null;
		}
	}

	public static Bitmap byteToBitmap(byte[] imgByte) {
		InputStream input = null;
		Bitmap bitmap = null;
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inSampleSize = 2;
		options.inMutable = true;
		input = new ByteArrayInputStream(imgByte);
		SoftReference softRef = new SoftReference(BitmapFactory.decodeStream(
				input, null, options));
		bitmap = (Bitmap) softRef.get();


		try {
			if (input != null) {
				input.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		//return compressImage(bitmap);
		return bitmap;
	}



	public static Bitmap compressImage(Bitmap bitmap){
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		//质量压缩方法，这里100表示不压缩，把压缩后的数据存放到baos中
		bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
		//把压缩后的数据baos存放到ByteArrayInputStream中
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
		//把ByteArrayInputStream数据生成图片
		Bitmap newBitmap = BitmapFactory.decodeStream(isBm, null, null);
		return newBitmap;
	}


	public static byte[] getBytesByBitmap(Bitmap bitmap) {
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bitmap.getByteCount());
		bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
		return outputStream.toByteArray();
	}

	/**
	 * add by cwy 2018-02-01 靠边停车设置
	 * 从字符串中分别拿到结果
	 */
	public static int[] getMarkDistance(String mark){
		if(StringUtil.isEmpty(mark)){
			return null;
		}

		int[] result = {0,0};
		String[] arrResult = mark.split(SPLIT);
		result[0] = Integer.parseInt(arrResult[0]);
		result[1] = Integer.parseInt(arrResult[1]);
		return result;
	}

	/**
	 * add by cwy 2018-02-01 靠边停车设置
	 * 拼装成结果
	 */
	public static String getMarkResult(int[] distance){
		if(null == distance || distance.length < 2){
			return null;
		}
		StringBuffer sb = new StringBuffer();
		sb.append(distance[0]);
		sb.append(SPLIT);
		sb.append(distance[1]);
		return sb.toString();
	}

}
